package ahu.zdw.com;

/**
 * Author: Zhang Dongwei
 * Date: 2021/12/15 21:31
 *
 * 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
 *
 * 回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/palindrome-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class _9_Palindrome {
    public static void main(String[] args) {
        int x = 12344321;
        Solution solution = new _9_Palindrome().new Solution();
        boolean flag = solution.isPalindrome(x);
        System.out.println(flag);
    }

    // 自己写的，还行吧， 7 ms， 82.95%， 37.8 MB ，65.98%
    class Solution {
        public boolean isPalindrome(int x) {
            int flag = 1;
            if(x<0){
                flag = -1;
            }
            String xstring = Integer.toString(x);
            int l = xstring.length();
            for(int i=0;i<l/2;i++){
                if(xstring.charAt(i)!=xstring.charAt(l-i-1)){
                    flag = -1;
                }
            }
            if(flag == -1){
                return false;
            }
            return true;
        }
    }

    // 讨论中找的，3ms,快，但是内存用了 37.9 MB， 30.07%， 不容易想
    class Solution1 {
        public boolean isPalindrome(int x) {
            if (x == 0) return true;
            if (x < 0 || x % 10 == 0) return false;
            int reversed = 0;
            while (x > reversed) {
                reversed = reversed * 10 + x % 10;
                x /= 10;
            }
            return x == reversed || x == reversed / 10;
        }
    }
}
